package com.swinw.asumall.search.thread;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class TowTaskToOne {
    public static ExecutorService executorService = Executors.newFixedThreadPool(10);
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> {
            System.out.println("任务1线程启动了");
            int a = 10 / 2;
            System.out.println("任务1线程结束");
            return a;
        }, executorService);

        CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> {
            System.out.println("任务二线程启动");
            System.out.println("任务二线程结束");
            return 0;
        }, executorService);
        //前两个任务只要有一个成功，接收其中一个任务的返回结果（前两个任务的返回结果必须一致）
        //处理任务，有返回值
        CompletableFuture<String> future3 = future1.applyToEitherAsync(future2, (res) -> {
            System.out.println("任务3执行，上一个成功完成的任务结果 " + res);
            return "task3 " + res;
        }, executorService);
        System.out.println(future3.get());
        //前两个任务只要有一个成功，接收其中一个任务的返回结果（前两个任务的返回结果必须一致）
        //处理任务，没有返回值
//        future1.acceptEitherAsync(future2,(res)->{
//            System.out.println("任务3执行，上一个成功完成的任务结果 " + res);
//        },executorService);

        //两个任务完成一个，不需要获取之前任务的返回值，处理任务，没有返回值
//        future1.runAfterEitherAsync(future2,()->{
//            System.out.println("任务3执行");
//        });

    }
}
